#!/usr/bin/python
#coding:utf-8
#Projeto Advocatus

import wx
import sys
from Cliente import*
from Endereco import*
from CPFCNPJ import*
from Processo import*
from Parte_Contraria import*
from Advogado import*
from RepositorioCliente import*

class Janela_Registro(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, wx.Size(750, 650))

        # Aqui criamos um painel e um notebook no painel
        panel = wx.Panel(self)

        #Scroll
        self.scroll = wx.ScrolledWindow(panel, id = -1, pos = wx.DefaultPosition, size = (730, 550), style= wx.SUNKEN_BORDER , name = "Scroll")
        self.scroll.SetScrollbars(1, 1, 500, 1200)

        #FONTES E TAMANHOS
        font1 = wx.Font(15, wx.BOLD, wx.NORMAL, wx.NORMAL)
        font2 = wx.Font(11, wx.NORMAL, wx.NORMAL, wx.BOLD)
        font3 = wx.Font(11, wx.NORMAL, wx.NORMAL, wx.NORMAL)
        
        #Estados
        Estados=['AC','AL','AM','AP','BA','CE','DF','ES','GO','MA','MG','MS','MT',
            'PA','PB','PE','PI','PR','RJ','RN','RO','RR','RS','SC','SE','SP','TO']
#------------------------------------------------------------------------------------------------------------------------------------------------#       
                                    # CLIENTE #
#------------------------------------------------------------------------------------------------------------------------------------------------#       

        Titulo_Cliente = wx.StaticText(self.scroll, -1, u'Dados Cliente', pos=(300, 10))
        Titulo_Cliente.SetFont(font1)

        Nome_Cliente =wx.StaticText(self.scroll, -1, 'Nome:*', pos=(20, 50))
        Nome_Cliente.SetForegroundColour('red')
        self.nome_Cliente = wx.TextCtrl(self.scroll, -1, '',  (80, 50), (300, 25))
        Nome_Cliente.SetFont(font3)
        self.nome_Cliente.SetFont(font3)

        RG_Cliente=wx.StaticText(self.scroll, -1, 'RG:*', pos=(20, 80))
        RG_Cliente.SetForegroundColour('red')
        self.RG_Cliente = wx.TextCtrl(self.scroll, -1, '',  (60, 80), (120, 25))
        self.RG_Cliente.SetMaxLength(8)
        RG_Cliente.SetFont(font3)
        self.RG_Cliente.SetFont(font3)

        OrgaoE_Cliente=wx.StaticText(self.scroll, -1, u'Orgão Expedidor:', pos=(200, 80))
        self.OrgaoE_Cliente = wx.ComboBox(self.scroll, -1, '',  (320, 80), (120, 25), choices=['SDS','SSP'],style=wx.CB_READONLY)
        OrgaoE_Cliente.SetFont(font3)
        self.OrgaoE_Cliente.SetFont(font3)

        CPF_Cliente=wx.StaticText(self.scroll, -1, 'CPF/CNPJ:', pos=(20, 110))
        CPF_Cliente.SetForegroundColour('red')
        self.CPF_Cliente = wx.TextCtrl(self.scroll, -1, '',  (100, 110), (150, 25))
        self.CPF_Cliente.SetMaxLength(14)
        CPF_Cliente.SetFont(font3)
        self.CPF_Cliente.SetFont(font3)

        End_Cliente=wx.StaticText(self.scroll, -1, u'ENDEREÇO', pos=(20, 140))
        End_Cliente.SetFont(font2)

        Rua_Cliente=wx.StaticText(self.scroll, -1, u'Rua:', pos=(20, 170))
        self.Rua_Cliente = wx.TextCtrl(self.scroll, -1, '',  (60, 170), (300, 25))
        Rua_Cliente.SetFont(font3)
        self.Rua_Cliente.SetFont(font3)

        Num_Casa_Cliente=wx.StaticText(self.scroll, -1, u'Nº:', pos=(370, 170))
        self.Num_Casa_Cliente = wx.TextCtrl(self.scroll, -1, '',  (400, 170), (70, 25))
        Num_Casa_Cliente.SetFont(font3)
        self.Num_Casa_Cliente.SetFont(font3)

        Complemento_Cliente=wx.StaticText(self.scroll, -1, u'Complemento:', pos=(480, 170))
        self.Complemento_Cliente = wx.TextCtrl(self.scroll, -1, '',  (580, 170), (100,25))
        Complemento_Cliente.SetFont(font3)
        self.Complemento_Cliente.SetFont(font3)

        Cidade_Cliente=wx.StaticText(self.scroll, -1, u'Cidade:', pos=(20, 200))
        self.Cidade_Cliente = wx.TextCtrl(self.scroll, -1, '',  (75, 200), (200, 25))
        Cidade_Cliente.SetFont(font3)
        self.Cidade_Cliente.SetFont(font3)

        Bairro_Cliente=wx.StaticText(self.scroll, -1, u'Bairro:', pos=(300, 200))
        self.Bairro_Cliente = wx.TextCtrl(self.scroll, -1, '',  (350, 200), (150, 25))
        Bairro_Cliente.SetFont(font3)
        self.Bairro_Cliente.SetFont(font3)

        Estado_Cliente=wx.StaticText(self.scroll, -1, u'Estado:', pos=(510,200))
        self.Estado_Cliente = wx.ComboBox(self.scroll, -1, 'PE',  (570, 200), (40, 25), choices=Estados, style=wx.CB_READONLY)
        Estado_Cliente.SetFont(font3)
        self.Estado_Cliente.SetFont(font3)

        CEP_Cliente=wx.StaticText(self.scroll, -1, u'CEP:', pos=(20, 230))
        self.CEP_Cliente = wx.TextCtrl(self.scroll, -1, '',  (60, 230), (120, 25))
        CEP_Cliente.SetFont(font3)
        self.CEP_Cliente.SetFont(font3)

        TEL_Cliente=wx.StaticText(self.scroll, -1, u'CONTATO', pos=(20, 260))
        TEL_Cliente.SetFont(font2)

        Fixo_Cliente=wx.StaticText(self.scroll, -1, u'Fixo:', pos=(20, 290))
        self.Fixo_Cliente = wx.TextCtrl(self.scroll, -1, '',  (60, 290), (150, 25))
        Fixo_Cliente.SetFont(font3)
        self.Fixo_Cliente.SetFont(font3)

        Movel_Cliente=wx.StaticText(self.scroll, -1, u'Movel:', pos=(250, 290))
        self.Movel_Cliente = wx.TextCtrl(self.scroll, -1, '',  (300, 290), (150, 25))
        Movel_Cliente.SetFont(font3)
        self.Movel_Cliente.SetFont(font3)

        Email_Cliente=wx.StaticText(self.scroll, -1, u'Email:', pos=(20, 320))
        self.Email_Cliente = wx.TextCtrl(self.scroll, -1, '',(60, 320), (200, 25))
        Email_Cliente.SetFont(font3)
        self.Email_Cliente.SetFont(font3)

#------------------------------------------------------------------------------------------------------------------------------------------------#       
                                    # PROCESSO #
#------------------------------------------------------------------------------------------------------------------------------------------------#       
        Titulo_Processo = wx.StaticText(self.scroll, -1, u'Dados do Processo', pos=(280, 360))
        Titulo_Processo.SetFont(font1)

        #PROCESSO

        Processo=wx.StaticText(self.scroll, -1, u'PROCESSO', pos=(20, 400))
        Processo.SetFont(font2)

        Num_Processo=wx.StaticText(self.scroll, -1, 'Numero Processo:', pos=(20, 430))
        self.Num_Processo = wx.TextCtrl(self.scroll, -1, '',  (150, 430), (100, 25))
        Num_Processo.SetFont(font3)
        self.Num_Processo.SetFont(font3)

        Tipo_Processo=wx.StaticText(self.scroll, -1, u'Tipo de Processo:', pos=(20, 460))
        self.Tipo_Processo = wx.TextCtrl(self.scroll, -1, '',  (150, 460), (120, 25))
        Tipo_Processo.SetFont(font3)
        self.Tipo_Processo.SetFont(font3)

        Cidade_Processo=wx.StaticText(self.scroll, -1, u'Cidade do Processo:', pos=(280, 460))
        self.Cidade_Processo = wx.TextCtrl(self.scroll, -1, '',  (420, 460), (150, 25))
        Cidade_Processo.SetFont(font3)
        self.Cidade_Processo.SetFont(font3)

        Vara=wx.StaticText(self.scroll, -1, u'Vara:', pos=(20, 490))
        self.Vara = wx.TextCtrl(self.scroll, -1, '',  (60, 490), (70, 25))
        Vara.SetFont(font3)
        self.Vara.SetFont(font3)

        Juiz=wx.StaticText(self.scroll, -1, u'Juiz Competente:', pos=(170, 490))
        self.Juiz = wx.TextCtrl(self.scroll, -1, '',  (300, 490), (200, 25))
        Juiz.SetFont(font3)
        self.Juiz.SetFont(font3)

        Fase=wx.StaticText(self.scroll, -1, u'Fase Processual:', pos=(20, 520))
        self.Fase = wx.TextCtrl(self.scroll, -1, '',  (140, 520), (150, 25))
        Fase.SetFont(font3)
        self.Fase.SetFont(font3)

        wx.StaticLine(self.scroll, -1, (20, 560), (680,2))

        #PARTE CONTRARIA "PC"
        ParteC=wx.StaticText(self.scroll, -1, u'PARTE CONTRARIA', pos=(20, 570))
        ParteC.SetFont(font2)

        nome_PC=wx.StaticText(self.scroll, -1, 'Nome:', pos=(20, 600))
        self.nome_PC = wx.TextCtrl(self.scroll, -1, '',  (70, 600), (300, 25))
        nome_PC.SetFont(font3)
        self.nome_PC.SetFont(font3)
        
        CPF_PC=wx.StaticText(self.scroll, -1, 'CPF/CNPJ:', pos=(20, 630))
        self.CPF_PC = wx.TextCtrl(self.scroll, -1, '',  (100, 630), (120, 25))
        CPF_PC.SetFont(font3)
        self.CPF_PC.SetFont(font3)

        End_PC=wx.StaticText(self.scroll, -1, u'ENDEREÇO', pos=(20, 660))
        End_PC.SetFont(font2)

        Rua_PC=wx.StaticText(self.scroll, -1, u'Rua:', pos=(20, 690))
        self.Rua_PC = wx.TextCtrl(self.scroll, -1, '',  (60, 690), (300, 25))
        Rua_PC.SetFont(font3)
        self.Rua_PC.SetFont(font3)

        Num_Casa_PC=wx.StaticText(self.scroll, -1, u'Nº:', pos=(370,690))
        self.Num_Casa_PC = wx.TextCtrl(self.scroll, -1, '',  (400, 690), (70, 25))
        Num_Casa_PC.SetFont(font3)
        self.Num_Casa_PC.SetFont(font3)

        Complemento_PC=wx.StaticText(self.scroll, -1, u'Complemento:', pos=(480, 690))
        self.Complemento_PC = wx.TextCtrl(self.scroll, -1, '',  (580, 690), (100,25))
        Complemento_PC.SetFont(font3)
        self.Complemento_PC.SetFont(font3)

        Cidade_PC=wx.StaticText(self.scroll, -1, u'Cidade:', pos=(20, 720))
        self.Cidade_PC = wx.TextCtrl(self.scroll, -1, '',  (80, 720), (200, 25))
        Cidade_PC.SetFont(font3)
        self.Cidade_PC.SetFont(font3)

        Bairro_PC=wx.StaticText(self.scroll, -1, u'Bairro:', pos=(300, 720))
        self.Bairro_PC = wx.TextCtrl(self.scroll, -1, '',  (350, 720), (150, 25))
        Bairro_PC.SetFont(font3)
        self.Bairro_PC.SetFont(font3)

        Estado_PC=wx.StaticText(self.scroll, -1, u'Estado:', pos=(510,720))
        self.Estado_PC = wx.ComboBox(self.scroll, -1, 'PE',  (570, 720), (40, 25),choices=Estados,style=wx.CB_READONLY)
        Estado_PC.SetFont(font3)
        self.Estado_PC.SetFont(font3)

        CEP_PC=wx.StaticText(self.scroll, -1, u'CEP:', pos=(20, 750))
        self.CEP_PC = wx.TextCtrl(self.scroll, -1, '',  (60, 750), (120, 25))
        CEP_PC.SetFont(font3)
        self.CEP_PC.SetFont(font3)

        TEL_PC=wx.StaticText(self.scroll, -1, u'TELEFONE', pos=(20, 780))
        TEL_PC.SetFont(font2)

        Fixo_PC=wx.StaticText(self.scroll, -1, u'Fixo:', pos=(20, 810))
        self.Fixo_PC = wx.TextCtrl(self.scroll, -1, '',  (60, 810), (150, 25))
        Fixo_PC.SetFont(font3)
        self.Fixo_PC.SetFont(font3)

        Movel_PC=wx.StaticText(self.scroll, -1, u'Movel:', pos=(250, 810))
        self.Movel_PC = wx.TextCtrl(self.scroll, -1, '',  (300, 810), (150, 25))
        Movel_PC.SetFont(font3)
        self.Movel_PC.SetFont(font3)

        wx.StaticLine(self.scroll, -1, (20, 850), (680,2))

        #ADVOGADO "Adv"

        Advogado=wx.StaticText(self.scroll, -1, u'ADVOGADO', pos=(20, 860))
        Advogado.SetFont(font2)

        nome_Adv=wx.StaticText(self.scroll, -1, 'Nome:', pos=(20, 890))
        self.nome_Adv = wx.TextCtrl(self.scroll, -1, '',  (70, 890), (300, 25))
        nome_Adv.SetFont(font3)
        self.nome_Adv.SetFont(font3)

        OAB_Adv=wx.StaticText(self.scroll, -1, 'OAB:', pos=(20, 920))
        self.OAB_Adv = wx.TextCtrl(self.scroll, -1, '',  (60, 920), (120, 25))
        OAB_Adv.SetFont(font3)
        self.OAB_Adv.SetFont(font3)

        End_Adv=wx.StaticText(self.scroll, -1, u'ENDEREÇO', pos=(20, 960))
        End_Adv.SetFont(font2)

        Rua_Adv=wx.StaticText(self.scroll, -1, u'Rua:', pos=(20, 990))
        self.Rua_Adv = wx.TextCtrl(self.scroll, -1, '',  (60, 990), (300, 25))
        Rua_Adv.SetFont(font3)
        self.Rua_Adv.SetFont(font3)

        Num_Casa_Adv=wx.StaticText(self.scroll, -1, u'Nº:', pos=(370,990))
        self.Num_Casa_Adv = wx.TextCtrl(self.scroll, -1, '',  (400, 990), (70, 25))
        Num_Casa_Adv.SetFont(font3)
        self.Num_Casa_Adv.SetFont(font3)

        Complemento_Adv=wx.StaticText(self.scroll, -1, u'Complemento:', pos=(480, 990))
        self.Complemento_Adv = wx.TextCtrl(self.scroll, -1, '',  (580, 990), (100,25))
        Complemento_Adv.SetFont(font3)
        self.Complemento_Adv.SetFont(font3)

        Cidade_Adv=wx.StaticText(self.scroll, -1, u'Cidade:', pos=(20, 1020))
        self.Cidade_Adv = wx.TextCtrl(self.scroll, -1, '',  (80, 1020), (200, 25))
        Cidade_Adv.SetFont(font3)
        self.Cidade_Adv.SetFont(font3)

        Bairro_Adv=wx.StaticText(self.scroll, -1, u'Bairro:', pos=(300, 1020))
        self.Bairro_Adv = wx.TextCtrl(self.scroll, -1, '',  (350, 1020), (150, 25))
        Bairro_Adv.SetFont(font3)
        self.Bairro_Adv.SetFont(font3)

        Estado_Adv=wx.StaticText(self.scroll, -1, u'Estado:', pos=(510,1020))
        self.Estado_Adv = wx.ComboBox(self.scroll, -1, 'PE',  (570, 1020), (40, 25),choices=Estados,style=wx.CB_READONLY)
        Estado_Adv.SetFont(font3)
        self.Estado_Adv.SetFont(font3)

        CEP_Adv=wx.StaticText(self.scroll, -1, u'CEP:', pos=(20, 1050))
        self.CEP_Adv = wx.TextCtrl(self.scroll, -1, '',  (60, 1050), (120, 25))
        CEP_Adv.SetFont(font3)
        self.CEP_Adv.SetFont(font3)

        TEL_Adv=wx.StaticText(self.scroll, -1, u'TELEFONE', pos=(20, 1080))
        TEL_Adv.SetFont(font2)

        Fixo_Adv=wx.StaticText(self.scroll, -1, u'Fixo:', pos=(20, 1110))
        self.Fixo_Adv = wx.TextCtrl(self.scroll, -1, '',  (60, 1110), (150, 25))
        Fixo_Adv.SetFont(font3)
        self.Fixo_Adv.SetFont(font3)

        Movel_Adv=wx.StaticText(self.scroll, -1, u'Movel:', pos=(250, 1110))
        self.Movel_Adv = wx.TextCtrl(self.scroll, -1, '',  (300, 1110), (150, 25))
        Movel_Adv.SetFont(font3)
        self.Movel_Adv.SetFont(font3)


        Aviso=wx.StaticText(panel, -1, u'Itens com * são Obrigatorios!', pos=(20, 550))
        Aviso.SetForegroundColour('red')
        Aviso.SetFont(font2)
        
        wx.Button(panel, 2, 'Adicionar', (300, 570))
        self.Bind(wx.EVT_BUTTON, self.OnAdd, id=2)

        wx.Button(panel, 1, 'Imprimir', (400, 570))
        self.Bind(wx.EVT_BUTTON, self.OnPrint, id=1)
        
        #Definir Tamanho Padrao
        self.SetSizeHints(750,650,750,650)

    def OnAdd(self,event):

        #Verificacao de Campos Obrigatorios
        def Verificacao(Termo,Termo2, Termo3):
            if len(Termo) == 0 or len(Termo2) == 0 or len(Termo3) == 0:
                Msg_Erro = wx.MessageDialog(self, u'Campo Obrigatorio não preenchido!!', 'Advocatus v1.0', wx.OK|wx.ICON_ERROR)
                Msg_Erro.ShowModal()
                Msg_Erro.Destroy()

            else:
                #Adicionar Endereco Cliente                      
                end_Cliente = Endereco(self.Rua_Cliente.GetValue(),
                    self.Num_Casa_Cliente.GetValue(),self.Complemento_Cliente.GetValue(),
                    self.Cidade_Cliente.GetValue(),self.Bairro_Cliente.GetValue(),
                    self.Estado_Cliente.GetValue(),self.CEP_Cliente.GetValue(),
                    self.Fixo_Cliente.GetValue(),self.Movel_Cliente.GetValue())
                #Adicionar Cpf Cliente
                cpfcnpj_Cliente = CPFCNPJ(self.CPF_Cliente.GetValue())
                #Adicionar Dados Cliente
                cliente = Cliente(self.nome_Cliente.GetValue(),self.RG_Cliente.GetValue(),
                    self.OrgaoE_Cliente.GetValue(), cpfcnpj_Cliente, end_Cliente,self.Email_Cliente.GetValue()) 
                
                #Adicionar Parte Contraria
                end_ParteContraria = Endereco(self.Rua_PC.GetValue(),self.Num_Casa_PC.GetValue(),
                    self.Complemento_PC.GetValue(),self.Cidade_PC.GetValue(),
                    self.Bairro_PC.GetValue(),self.Estado_PC.GetValue(),
                    self.CEP_PC.GetValue(),self.Fixo_PC.GetValue(),self.Movel_PC.GetValue())

                cpfcnpj_PC = CPFCNPJ(self.CPF_PC.GetValue())

                ParteContraria = Parte_Contraria(self.nome_PC.GetValue(),cpfcnpj_PC,end_ParteContraria)
                
                #Adicionar Advogado PC
                end_Advogado = Endereco(self.Rua_Adv.GetValue(),self.Num_Casa_Adv.GetValue(),
                    self.Complemento_Adv.GetValue(),self.Cidade_Adv.GetValue(),
                    self.Bairro_Adv.GetValue(),self.Estado_Adv.GetValue(),
                    self.CEP_Adv.GetValue(),self.Fixo_Adv.GetValue(),self.Movel_Adv.GetValue())

                advogado = Advogado(self.nome_Adv.GetValue(),self.OAB_Adv.GetValue(),
                    end_Advogado)

                #Adicionar Processo
                processo = Processo(self.Num_Processo.GetValue(),
                    self.Tipo_Processo.GetValue(),self.Cidade_Processo.GetValue(),
                    self.Vara.GetValue(),self.Juiz.GetValue(),self.Fase.GetValue(),ParteContraria,advogado)

                #Colocando no Banco de Dados Arquivo
                self.Repositorio = RepositorioCliente(cliente,processo)
                
                self.Repositorio.Add_Cliente()
                self.Repositorio.Add_Processo()
                self.Repositorio.Add_ParteContraria()
                self.Repositorio.Add_Advogado()
                self.Repositorio.Add_ListaClientes()
                

                #Limpar ComboBox
                Lista_ComboBox = [self.nome_Cliente,self.RG_Cliente,self.CPF_Cliente,
                self.Rua_Cliente,self.Num_Casa_Cliente,self.CEP_Cliente,self.Complemento_Cliente,
                self.Cidade_Cliente,self.Bairro_Cliente,self.Fixo_Cliente,self.Movel_Cliente,
                self.Email_Cliente,self.Num_Processo,self.Tipo_Processo,self.Cidade_Processo,
                self.Vara,self.Juiz,self.Fase,self.nome_PC,self.CPF_PC,self.Rua_PC,self.Num_Casa_PC,self.Complemento_PC,
                self.Cidade_PC,self.Bairro_PC,self.CEP_PC,self.Fixo_PC,self.Movel_PC,
                self.nome_Adv,self.OAB_Adv,self.Rua_Adv,self.Num_Casa_Adv,self.Complemento_Adv,self.Cidade_Adv,
                self.Bairro_Adv,self.CEP_Adv,self.Fixo_Adv,self.Movel_Adv]
    

                def LimparComboBOX(Lista):
                    for termo in Lista:
                        limpar = termo.Clear()
                    return limpar

                LimparComboBOX(Lista_ComboBox)

                #Mensagem de Aviso
                Msg_Aviso = wx.MessageDialog(self, 'Cliente Cadastrado com Sucesso!!', 'Advocatus v1.0', wx.OK|wx.ICON_INFORMATION)
                Msg_Aviso.ShowModal()
                Msg_Aviso.Destroy()

        Verificacao(self.nome_Cliente.GetValue(),self.RG_Cliente.GetValue(),
            self.CPF_Cliente.GetValue())

    
    def OnPrint(self, event):
        """Show a dialog window to print a document."""
        data = wx.PrintDialogData()
        data.EnableSelection(True)
        data.EnablePrintToFile(True)
        data.EnablePageNumbers(True)
        data.SetMinPage(1)
        data.SetMaxPage(5)
        data.SetAllPages(True)

        dialog = wx.PrintDialog(self, data)
        if dialog.ShowModal() == wx.ID_OK:
            data = dialog.GetPrintDialogData()
        else:
            dialog.Destroy()

   
        